import runtimeType from '../../sys/runtimeType';

/**
 * 【同步方法】信息提示弹出框。如果是在PC端使用，那么是创建的dom；如果是在uni使用，那么是调用的官方api
 * @param text 要提示的文字信息
 */
export function showToast(text = '') {
    
    // 获取当前运行环境
    let runType = runtimeType();
    // 弹框提示内容检测
    if (!text) { text = '(弹框内容为空)'; }
    
    // 如果是“非UNI”环境
    if (runType == 'NOT-UNI')
    {
        // 自动关闭弹框的定时器对象
        let obj_timeout_name = '__focus_obj_network_timeout_showToast';
        // 弹框元素节点id
        let str_dom_id = '__focus_network_toast_domID__';
        
        // 创建一个装载弹框html的div容器
        let dom_toast = document.createElement("div");
        dom_toast.setAttribute('id', str_dom_id);
        dom_toast.setAttribute('style', 'position:fixed; left:0; top:0; right:0; bottom:0; z-index:2100088520; pointer-events:none; display:flex; flex-direction:column; justify-content:center; align-items:center; overflow:hidden;');
        // 弹框DOM的html字符串
        let str_toastDom = `
            <div style="max-width:50vw; padding:10px 20px; border-radius:5px; background-color:rgba(17,17,17,0.7); box-sizing:border-box; text-align:center;">
                <span style="font-size:13px; line-height:18px; color:#FFFFFF; text-align:center; word-break:break-all; white-space:normal;"
                >${text}</span>
            </div>
        `;
        // 将弹框的html放入div容器中
        dom_toast.innerHTML = str_toastDom;
        
        // 根据id搜索弹框的dom对象
        let dom_toast_had = document.getElementById(str_dom_id);
        // 如果存在则删除此dom
        if (dom_toast_had) { dom_toast_had.parentNode.removeChild(dom_toast_had); }
        // 将弹框的div容器添加到页面中
        document.body.appendChild(dom_toast);
        
        // 定时2500ms自动关闭弹框
        if (window[obj_timeout_name]) { clearTimeout(window[obj_timeout_name]); }
        window[obj_timeout_name] = setTimeout(()=>{
            // 根据id搜索loading的dom对象
            let dom_toast_had2 = document.getElementById(str_dom_id);
            // 如果存在则删除此dom
            if (dom_toast_had2) { dom_toast_had2.parentNode.removeChild(dom_toast_had2); }
        }, 2500);
    }
    
    // 如果是UNI环境
    else {
        // 调用uni的信息弹框api
        uni.showToast({ title: text, icon: 'none', duration: 2500 });
    }
    
}

/**
 * 【同步方法】显示加载中提示框。如果是在PC端使用，那么是创建的dom；如果是在uni使用，那么是调用的官方api
 * @param text 要提示的文字信息
 * @param isWait 是否需要延迟弹出，默认：false
 */
export function showLoading(text = '', isWait = false) {
    
    // 获取当前运行环境
    let runType = runtimeType();
    // 弹框提示内容检测
    if (!text) { text = '请稍等'; }
    // 加载框延时显示的定时器对象名称
    let obj_timeout_name = '__focus_obj_network_timeout_loading';
    
    // 如果是“非UNI”环境
    if (runType == 'NOT-UNI')
    {
        // 弹框元素节点id
        let str_dom_id = '__focus_network_loading_domID__';
        // 弹框元素显示文本节点id
        let str_dom_span_id = '__focus_network_loading_span_domID__';
        
        // 创建一个装载弹框html的div容器
        let dom_loading = document.createElement("div");
        dom_loading.setAttribute('id', str_dom_id);
        dom_loading.setAttribute('style', 'position:fixed; left:0; top:0; right:0; bottom:0; z-index:2100088520; pointer-events:none; display:flex; flex-direction:column; justify-content:center; align-items:center; overflow:hidden;');
        // 弹框DOM的html字符串
        let str_loadingDom = `
            <div style="width:130px; padding-top:20px; padding-bottom:15px; border-radius:5px; background-color:rgba(17,17,17,0.7); box-sizing:border-box; display:flex; flex-direction:column; justify-content:center; align-items:center;">
                <img style="width:34px; height:34px;" src=""/>
                <span id="${str_dom_span_id}" style="width:128px; margin-top:10px; font-size:16px; line-height:20px; color:#FFFFFF; text-align:center; text-overflow:ellipsis; word-break:break-all; white-space:nowrap; overflow:hidden;"
                >${text}</span>
            </div>
        `;
        // 将弹框的html放入div容器中
        dom_loading.innerHTML = str_loadingDom;
        
        // 根据id搜索弹框的dom对象
        let dom_loading_had = document.getElementById(str_dom_id);
        // 如果dom已经存在，那么直接更改显示文本
        if (dom_loading_had) { document.getElementById(str_dom_span_id).innerHTML = text; }
        // 否则 将弹框的div容器添加到页面中
        else {
            // 如果开启了延时处理
            if (isWait == true)
            {
                // 如果已经存在，先注销定时器
                if (window[obj_timeout_name]) { clearTimeout(window[obj_timeout_name]); }
                // 创建定时器，延时弹出
                window[obj_timeout_name] = setTimeout(()=>{  document.body.appendChild(dom_loading);  }, 2500);
            }
            // 没开那么就立即弹出
            else { document.body.appendChild(dom_loading); }
        }
    }
    
    // 如果是“APP”环境
    else if (runType == 'APP-PLUS' || runType == 'APP-NVUE')
    {
        // 原生plus弹出框对象
        let obj_plus_Tbox = '__focus_obj_network_plus_Tbox';
        
        // 如果原生弹出框已经存在
        if (uni[obj_plus_Tbox]) { uni[obj_plus_Tbox].setTitle(text); }
        // 没有则创建原生弹出框
        else {
            // 如果开启了延时处理
            if (isWait == true)
            {
                // 如果已经存在，先注销定时器
                if (uni[obj_timeout_name]) { clearTimeout(uni[obj_timeout_name]); }
                // 创建定时器，延时弹出
                uni[obj_timeout_name] = setTimeout(()=>{  uni[obj_plus_Tbox] = plus.nativeUI.showWaiting(text);  }, 2500);
            }
            // 没开那么就立即弹出
            else { uni[obj_plus_Tbox] = plus.nativeUI.showWaiting(text); }
        }
    }
    
    // 如果是其它环境
    else {
        // 如果开启了延时处理
        if (isWait == true)
        {
            // 如果已经存在，先注销定时器
            if (uni[obj_timeout_name]) { clearTimeout(uni[obj_timeout_name]); }
            // 创建定时器
            uni[obj_timeout_name] = setTimeout(()=>{
                // 调用uni的loading弹框api
                uni.showLoading({ title: text, mask: false });
            }, 2500);
        }
        // 没开那么就立即弹出
        else {
            // 调用uni的loading弹框api
            uni.showLoading({ title: text, mask: false });
        }
    }
    
}

/** 【同步方法】隐藏加载中提示框 */
export function hideLoading() {
    
    // 获取当前运行环境
    let runType = runtimeType();
    // 加载框延时显示的定时器对象名称
    let obj_timeout_name = '__focus_obj_network_timeout_loading';
    
    // 如果是“非UNI”环境
    if (runType == 'NOT-UNI')
    {
        // 弹框元素节点id
        let str_dom_id = '__focus_network_loading_domID__';
        // 如果已经存在，先注销定时器
        if (window[obj_timeout_name]) { clearTimeout(window[obj_timeout_name]); }
        // 根据id搜索loading的dom对象
        let dom_loading_had = document.getElementById(str_dom_id);
        // 如果存在则删除此dom
        if (dom_loading_had) { dom_loading_had.parentNode.removeChild(dom_loading_had); }
    }
    
    // 如果是“APP”环境
    else if (runType == 'APP-PLUS' || runType == 'APP-NVUE')
    {
        // 原生plus弹出框对象
        let obj_plus_Tbox = '__focus_obj_network_plus_Tbox';
        // 如果已经存在，先注销定时器
        if (uni[obj_timeout_name]) { clearTimeout(uni[obj_timeout_name]); }
        // 如果存在弹框那么销毁此弹框
        if (uni[obj_plus_Tbox]) { plus.nativeUI.closeWaiting(); uni[obj_plus_Tbox] = null; }
    }
    
    // 如果是其它环境
    else {
        // 如果已经存在，先注销定时器
        if (uni[obj_timeout_name]) { clearTimeout(uni[obj_timeout_name]); }
        // 调用uni的loading隐藏api
        uni.hideLoading();
    }
    
}